#include "drv_exti.h"
void drv_exti9_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;//用于配置 GPIO 引脚的模式（输入 / 输出等）
	EXTI_InitTypeDef EXTI_InitStruct;//用于配置外部中断触发方式、使能等
	NVIC_InitTypeDef NVIC_InitStruct;//用于配置中断优先级、中断使能（嵌套向量中断控制器）

	//GPIO初始化
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//开启GPIOF时钟
	RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFGEN,ENABLE);//开启syscfg时钟
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;//设为输入模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//具体对应的物理引脚
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//设为上拉电阻使能
	GPIO_Init(GPIOF,&GPIO_InitStruct);

	//绑定GPIO与引脚线
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF,EXTI_PinSource9);

	//EXTI初始化
	EXTI_InitStruct.EXTI_Line = EXTI_Line9;//指定中断线为9
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断模式
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//设为上升沿触发
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;//使能该中断线
	EXTI_Init(&EXTI_InitStruct);

	//NVIC初始化
	NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;//指定中断通道
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级（数值越小，优先级越高）
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//响应优先级（抢占优先级相同时，数值越小，优先级越高）
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能该中断通道
	NVIC_Init(&NVIC_InitStruct);
}
